package view;


import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;

import table.cellrenderer.BetragTableCellRenderer;
import table.cellrenderer.DateTableCellRenderer;
import table.tablemodel.KontoUebersichtTableModel;
import table.tablemodel.KontobewegungenTableModel;

import components.ComponentUtil;

public class KontobewegungenDialog extends JDialog {

    private static final long serialVersionUID = 100L;

    private JPanel jContentPane;
    private JLabel kundennummerLabel;

    private JTextField tfKundennummer;
    private JTable kontenTable;
    private JTable kontobewegungenTable;

    private JButton btZeigeKontobewegungen;
    private JButton btEnde;

    private KontoUebersichtTableModel kontoUebersichtTableModel;
    private KontobewegungenTableModel kontobewegungenTableModel;


    public KontobewegungenDialog(Frame owner, boolean b) {
        super(owner);
        initialize();
        setVisible(b);
    }

    public KontobewegungenDialog(Frame owner, boolean b, int aInitialKundennummer) {
        super(owner);
        initialize();
        getTfKundennummer().setText("" + aInitialKundennummer);
        setVisible(b);
    }

    private void initialize() {
        setSize(600, 500);
        setTitle("Bank-Anwendung - Kontobewegungen anzeigen");
        setContentPane(getJContentPane());
    }

    /**
     * This method initializes jContentPane
     *
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            kundennummerLabel = new JLabel("Kundennummer");
            kundennummerLabel.setBorder(new EmptyBorder(0, 4, 0, 4));

            JPanel topLeftPanel = new JPanel(new BorderLayout());
            topLeftPanel.add(kundennummerLabel, BorderLayout.WEST);
            topLeftPanel.add(getTfKundennummer(), BorderLayout.CENTER);

            JPanel topLeftWrapPanel = new JPanel(new BorderLayout());
            topLeftWrapPanel.add(topLeftPanel, BorderLayout.NORTH);

            JPanel topRightPanel = new JPanel(new GridLayout(2, 1));
            topRightPanel.add(getBtZeigeKontobewegungen());
            topRightPanel.add(getBtEnde());

            JPanel topPanel = new JPanel(new BorderLayout());
            topPanel.setBorder(new EmptyBorder(4, 2, 4, 2));
            topPanel.add(topLeftWrapPanel, BorderLayout.CENTER);
            topPanel.add(topRightPanel, BorderLayout.EAST);

            JPanel centerPanel = new JPanel(new GridLayout(2, 1));
            centerPanel.add(new JScrollPane(getKontenTable()));
            centerPanel.add(new JScrollPane(getKontobewegungenTable()));

            jContentPane = new JPanel(new BorderLayout());
            jContentPane.add(topPanel, BorderLayout.NORTH);
            jContentPane.add(centerPanel, BorderLayout.CENTER);
        }
        return jContentPane;
    }

    public JTable getKontenTable() {
        if (kontenTable == null) {
            kontenTable = new JTable(getKontoUebersichtTableModel());
            kontenTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            kontenTable.setDefaultRenderer(Double.class, new BetragTableCellRenderer());
        }
        return kontenTable;
    }

    public KontoUebersichtTableModel getKontoUebersichtTableModel() {
        if (kontoUebersichtTableModel == null) {
            kontoUebersichtTableModel = new KontoUebersichtTableModel();
        }
        return kontoUebersichtTableModel;
    }

    private JTable getKontobewegungenTable() {
        if (kontobewegungenTable == null) {
            kontobewegungenTable = new JTable(getKontobewegungenTableModel());
            kontobewegungenTable.setDefaultRenderer(Double.class, new BetragTableCellRenderer());
            kontobewegungenTable.setDefaultRenderer(Date.class, new DateTableCellRenderer());
        }
        return kontobewegungenTable;
    }

    public KontobewegungenTableModel getKontobewegungenTableModel() {
        if (kontobewegungenTableModel == null) {
            kontobewegungenTableModel = new KontobewegungenTableModel();
        }
        return kontobewegungenTableModel;
    }

    public JTextField getTfKundennummer() {
        if (tfKundennummer == null) {
            tfKundennummer = new JTextField();
            ComponentUtil.addEnterKeyDelegator(tfKundennummer, getBtZeigeKontobewegungen());
        }
        return tfKundennummer;
    }

    public JButton getBtZeigeKontobewegungen() {
        if (btZeigeKontobewegungen == null) {
            btZeigeKontobewegungen = new JButton("Zeige Kontobewegungen");
            ComponentUtil.addDefaultButtonBehaviour(btZeigeKontobewegungen);
        }
        return btZeigeKontobewegungen;
    }

    public JButton getBtEnde() {
        if (btEnde == null) {
            btEnde = new JButton("Beenden");
            ComponentUtil.addDefaultButtonBehaviour(btEnde);
        }
        return btEnde;
    }
}
